home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 24
/
Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso
/
Aminet
/
dev
/
c
/
AmiVoGL_MDEV.lha
/
examples
/
fworld.F
< prev
next >
Wrap
Text File
|
1991-06-03
|
3KB
|
170 lines
c
c most of the things in this program have been done before but it has
c a certain novelty value.
c
program fworld
#ifdef SGI
#include "fgl.h"
#include "fdevice.h"
#else
#include "fvogl.h"
#include "fvodevice.h"
#endif
integer *2 val
integer SPHERE
real RADIUS, PI
parameter (RADIUS = 10.0, PI = 3.1415926535, SPHERE = 1)
call winope('fworld', 6)
call hfont('futura.m', 8)
call unqdev(INPUTC)
call qdevic(SPACEK)
call qdevic(QKEY)
call qdevic(ESCKEY)
call perspe(800, 1.0, 0.001, 50.0)
call lookat(13.0, 13.0, 8.0, 0.0, 0.0, 0.0, 0)
call color(BLACK)
call clear
call makesp
c
c draw the main one in cyan
c
call color(CYAN)
call callob(SPHERE)
c
c draw a smaller one outside the main one in white
c
call color(WHITE)
call pushma
call transl(0.0, -1.4 * RADIUS, 1.4 * RADIUS)
call scale(0.3, 0.3, 0.3)
call callob(SPHERE)
call popmat
c
c scale the text
c
call hboxfi(2.0 * PI * RADIUS, 0.25 * RADIUS, 31)
c
c now write the text in rings around the main sphere
c
call color(GREEN)
call showroundtext('Around the world in eighty days ')
call color(BLUE)
c
c note: that software text is rotated here as
c anything else would be whether you use textang
c or rotate depends on what you are trying to do.
c Experience is the best teacher here.
c
call rotate(900, 'x')
call showroundtext('Around the world in eighty days ')
call color(RED)
call rotate(900, 'z')
call showroundtext('Around the world in eighty days ')
idum = qread(val)
call gexit
end
c
c showroundtext
c
c draw string str wrapped around a circ in 3d
c
subroutine showroundtext(str)
character *(*) str
real RADIUS
parameter (RADIUS = 10.0)
integer j
inc = 3600 / float(nchars(str))
j = 1
do 10 i = 0, 3600, inc
call pushma
c
c find the spot on the edge of the sphere
c by making it (0, 0, 0) in world coordinates
c
call rotate(i, 'y')
call transl(0.0, 0.0, RADIUS)
call move(0.0, 0.0, 0.0)
call hdrawc(str(j:j))
j = j + 1
call popmat
10 continue
end
c
c makesphere
c
c create the sphere object
c
subroutine makesp
integer SPHERE
parameter (SPHERE = 1)
parameter(PI = 3.1415926535)
parameter(RADIUS = 10.0)
call makeob(SPHERE)
do 10 i = 0, 1800, 200
call pushma
call rotate(i, 'y')
call circ(0.0, 0.0, RADIUS)
call popmat
10 continue
call pushma
call rotate(900, 'x')
do 20 a = -90.0, 90.0, 20.0
r = RADIUS * cos(a*PI/180.0)
z = RADIUS * sin(a*PI/180.0)
call pushma
call transl(0.0, 0.0, -z)
call circ(0.0, 0.0, r)
call popmat
20 continue
call popmat
call closeo
return
end
c
c nchars
c
c find the number of characters in the string str
c
integer function nchars(str)
character *(*) str
do 10 i = len(str), 1, -1
if (str(i:i) .ne. ' ') then
nchars = i
return
end if
10 continue
nchars = 0
return
end